﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;
using System.Windows.Forms;

namespace Arthus
{
    class Tarifa
    {
        //obuhvata tabele TARIFE I TARSTO
        MySqlConnection konekcija;
        MySqlCommand komanda = new MySqlCommand();
        MySqlDataReader datareader = null;
        MySqlDataAdapter adapter = null;
        DataTable dataTable = null;
        DataSet dataSet = null;

        public void PopuniComboBoxOznakom(ComboBox combobox)
        {
            combobox.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT TARIFAOZN FROM TARIFE;";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    combobox.Items.Add(dataTable.Rows[i][0]);
                }
                combobox.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        } //puni combobox oznakom

        public int VratiIdNaOsnovuOznake(String oznakaTarife)
        {
            int rezultat = 0;
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT TARIFAID FROM TARIFE WHERE TARIFAOZN='" + oznakaTarife + "' ;";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    rezultat = (int)datareader.GetValue(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        } //vraca id tarife na osnovu oznake

        public String VratiOznakuTarifeNaOsnovuID(int idTarife)
        {
            String rezultat = "";
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT TARIFAOZN FROM TARIFE WHERE TARIFAID=" + idTarife + ";";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    rezultat = (String)datareader.GetValue(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        } //vraca oznaku tarife na osnovu id

        public decimal VratiStopuPDVNaOsnovuIDINajnovijegDatuma(int idTarife)
        {
            decimal rezultat = 0.00m;
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT TARSTOSTO FROM TARSTO WHERE TARSTOTAR=" + idTarife + " AND TARSTODAT=(SELECT MAX(TARSTODAT) FROM TARSTO WHERE TARSTOTAR=" + idTarife + ")";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    rezultat = (decimal)datareader.GetValue(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public void PopuniListBoxTarifa(ListBox lb)
        {
            lb.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT TARIFAID, TARIFANAZ FROM TARIFE;";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    lb.Items.Add(dataTable.Rows[i][0] + ". " + dataTable.Rows[i][1]);
                }
                lb.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        }

        public void PopuniKontroleNaOsnovuIdTarife(int idTarife, TextBox oznaka, TextBox naziv, TextBox skracenica, TextBox stopa) {
            try
            {
                Tarifa tobj=new Tarifa();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT TARIFAOZN, TARIFANAZ, TARIFAPOR FROM TARIFE WHERE TARIFAID="+idTarife+";";
                datareader = komanda.ExecuteReader();
                while(datareader.Read())
                {
                    oznaka.Text = datareader.GetValue(0).ToString();
                    naziv.Text = datareader.GetValue(1).ToString();
                    skracenica.Text = datareader.GetValue(2).ToString();
                    stopa.Text = ""+tobj.VratiStopuPDVNaOsnovuIDINajnovijegDatuma(idTarife);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
        }

        public int VratiPovecanID()
        {
            int rezultat = 0;
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT MAX(TARIFAID) FROM TARIFE;";
                datareader = komanda.ExecuteReader();
                datareader.Read();
                rezultat = Convert.ToInt32(datareader.GetValue(0));
                rezultat++;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        //za stopu tarife
        private string VratiNajnovijiDatumNaOsnovuTarife(int idTarifa) {
            string rezultat = "";
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT MAX(DATE_FORMAT(TARSTODAT,'%Y-%m-%d')) FROM TARSTO WHERE TARSTOTAR=" + idTarifa + ";";
                datareader = komanda.ExecuteReader();
                datareader.Read();
                rezultat = datareader.GetValue(0).ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        } 
        private int VratiPovecanIDStopeTarife() {
            int rezultat = 0;
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT MAX(TARSTOID) FROM TARSTO;";
                datareader = komanda.ExecuteReader();
                datareader.Read();
                rezultat = Convert.ToInt32(datareader.GetValue(0));
                rezultat++;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }
        private void DodajStopuTarife(decimal stopa, int idTarifa) {
            try
            {
                Tarifa tarObj=new Tarifa();
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = string.Format("INSERT INTO `tarsto`(`TARSTOID`, `TARSTOTAR`, `TARSTODAT`, `TARSTOSTO`) VALUES ("
                    +tarObj.VratiPovecanIDStopeTarife()+","+idTarifa+",'"+System.DateTime.Now.ToString("yyyy-MM-dd")+"',"+stopa+")");
                int response = komanda.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }
        private void IzmeniStopuTarife(decimal stopa, int idTarifa) {
            try
            {
                Tarifa tarObj = new Tarifa();
                Tarifa tarObj2 = new Tarifa();
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = @"UPDATE `tarsto` SET `TARSTOSTO`=" + stopa + ", TARSTODAT='" 
                    + System.DateTime.Now.ToString("yyyy-MM-dd") + "' WHERE TARSTOTAR=" + idTarifa + " AND  TARSTODAT='"+tarObj2.VratiNajnovijiDatumNaOsnovuTarife(idTarifa)+"'";
                int response = komanda.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }
        public void ObrisiStopuTarife(String idTarife)
        {
            try
            {
                Tarifa tarObj = new Tarifa();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "DELETE FROM `tarsto` WHERE TARSTOTAR=" + Convert.ToInt32(idTarife) + " AND TARSTODAT='" 
                    + tarObj.VratiNajnovijiDatumNaOsnovuTarife(Convert.ToInt32(idTarife)) + "';";
                komanda.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void DodajTarifu(TextBox oznaka, TextBox naziv, TextBox skracenica, TextBox stopa) {
            try
            {
                Tarifa tarObj = new Tarifa();
                Tarifa tarObj2 = new Tarifa();
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                int idTs = tarObj.VratiPovecanID();
                komanda.CommandText = string.Format("INSERT INTO `tarife`(`TARIFAID`, `TARIFAOZN`, `TARIFAOZX`, `TARIFANAZ`, `TARIFAPOR`) VALUES ("
                    + idTs + ",'" + oznaka.Text + "','" + Razno.IzbrisiPojedineKaraktereIzStringa(oznaka.Text.ToUpper()) + "','" + naziv.Text + "','" + skracenica.Text + "')");
                int response = komanda.ExecuteNonQuery();
                tarObj2.DodajStopuTarife(Convert.ToDecimal(stopa.Text), idTs);
                MessageBox.Show("Uspešno dodata nova tarifa!");
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Već postoji tarifa sa takvom oznakom!");
            }  
            catch (FormatException ex)
            {
                MessageBox.Show("Morate popuniti polje stopa! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void IzmeniTarifu(int idTarife, TextBox oznaka, TextBox naziv, TextBox skracenica, TextBox stopa) {
            try
            {
                Tarifa tarObj = new Tarifa();
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                int idTs = tarObj.VratiPovecanID();
                komanda.CommandText = @"UPDATE `tarife` SET `TARIFAOZN`='" + oznaka.Text + "',`TARIFAOZX`='"
                    + Razno.IzbrisiPojedineKaraktereIzStringa(oznaka.Text.ToUpper()) + "',`TARIFANAZ`='" + naziv.Text + "',`TARIFAPOR`='"
                    + skracenica.Text + "' WHERE TARIFAID=" + idTarife + "";
                int response = komanda.ExecuteNonQuery();
                tarObj.IzmeniStopuTarife(Convert.ToDecimal(stopa.Text), idTarife);
                MessageBox.Show("Uspešno izmenjena tarifa!");
            }
            catch (FormatException ex) {
                MessageBox.Show("Morate popuniti polje stopa! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void ObrisiTarifu(String idTarife)
        {
            try
            {
                Tarifa tarObj = new Tarifa();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "DELETE FROM `tarife` WHERE TARIFAID="+idTarife+";";
                tarObj.ObrisiStopuTarife(idTarife.ToString());
                komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno obrisana tarifa!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }
    }
}
